package edu.uclm.esi.tysweb.ajedrez.actions;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;

import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import edu.uclm.esi.tysweb.ajedrez.dominio.Constantes;
import edu.uclm.esi.tysweb.ajedrez.dominio.GestorAjedrez;
import edu.uclm.esi.tysweb.ajedrez.dominio.Jugador;
import edu.uclm.esi.tysweb.ajedrez.dominio.Tablero;
import edu.uclm.esi.tysweb.ajedrez.dominio.mensajes.MensajeError;
import edu.uclm.esi.tysweb.ajedrez.websockets.Cliente;

public class EnviarMovimiento extends ActionSupport {
	private SQLException exception;
	private String desde, hasta;
	private char color;
	private int idPartida;
	
	public String execute() {
		try {
			HttpSession session = ServletActionContext.getRequest().getSession();

			Connection bd=(Connection) session.getAttribute("bd");
			bd.close();
			GestorAjedrez gestor=GestorAjedrez.get();
			int result=gestor.mover(idPartida, color, desde, hasta);
			Tablero partida=gestor.getTablero(idPartida);
			if (result<0) {
				Cliente jugadorQueMovio=Cliente.findJugador(partida.getJugador(color).getEmail());
				String textoError=partida.getMensajeError(result);
				MensajeError me=new MensajeError(textoError);
				try {
					jugadorQueMovio.enviar(me.toJSON().toString());
				} catch (IOException e) { }
			} else {
				Cliente blancas=Cliente.findJugador(partida.getJugador(Constantes.BLANCO).getEmail());
				Cliente negras=Cliente.findJugador(partida.getJugador(Constantes.NEGRO).getEmail());
				try {
					blancas.enviar(partida.toJSON().toString());
					negras.enviar(partida.toJSON().toString());
				} catch (IOException e) { }
			}
			return SUCCESS;
		} catch (SQLException e) {
			ActionContext.getContext().getSession().put("exception", e);
			this.exception=e;
			return ERROR;
		}
	}

	public String getResultado() {
		if (exception!=null)
			return exception.toString();
		return "OK";
	}

	public void setDesde(String desde) {
		this.desde = desde;
	}
	
	public void setHasta(String hasta) {
		this.hasta = hasta;
	}
	
	public void setColor(char color) {
		this.color = color;
	}
	
	public void setIdPartida(int idPartida) {
		this.idPartida = idPartida;
	}
}
